home *** CD-ROM | disk | FTP | other *** search
/ Scene Storm / Scene Storm - Volume 1.iso / coding / asm / demos / outcastmag / includes / pt-play+volscale.src < prev   
Text File  |  1980-01-03  |  22KB  |  1,141 lines

  1. ;********************************************
  2. ;* ----- Protracker V1.1B Playroutine ----- *
  3. ;* Lars "Zap" Hamre/Amiga Freelancers 1991  *
  4. ;* Bekkeliveien 10, N-2010 STRØMMEN, Norway *
  5. ;********************************************
  6.  
  7. * Scaled Master Volume inserted by Phil!95/Neo
  8.  
  9. ; VBlank Version 2:
  10. ; Call mt_init to initialize the routine, then call mt_music on
  11. ; each vertical blank (50 Hz). To end the song and turn off all
  12. ; voices, call mt_end.
  13.  
  14. ; This playroutine is not very fast, optimized or well commented,
  15. ; but all the new commands in PT1.1A should work.
  16. ; If it's not good enough, you'll have to change it yourself.
  17. ; We'll try to write a faster routine soon...
  18.  
  19. ; Changes from V1.0C playroutine:
  20. ; - Vibrato depth changed to be compatible with Noisetracker 2.0.
  21. ;   You'll have to double all vib. depths on old PT modules.
  22. ; - Funk Repeat changed to Invert Loop.
  23. ; - Period set back earlier when stopping an effect.
  24.  
  25. DMAWait = 300 ; Set this as low as possible without losing low notes.
  26.  
  27. Init_Filter equ 0    ;2 = on / 0 = off at start
  28.  
  29. n_note        EQU    0  ; W
  30. n_cmd        EQU    2  ; W
  31. n_cmdlo        EQU    3  ; B
  32. n_start        EQU    4  ; L
  33. n_length    EQU    8  ; W
  34. n_loopstart    EQU    10 ; L
  35. n_replen    EQU    14 ; W
  36. n_period    EQU    16 ; W
  37. n_finetune    EQU    18 ; B
  38. n_volume    EQU    19 ; B
  39. n_dmabit    EQU    20 ; W
  40. n_toneportdirec    EQU    22 ; B
  41. n_toneportspeed    EQU    23 ; B
  42. n_wantedperiod    EQU    24 ; W
  43. n_vibratocmd    EQU    26 ; B
  44. n_vibratopos    EQU    27 ; B
  45. n_tremolocmd    EQU    28 ; B
  46. n_tremolopos    EQU    29 ; B
  47. n_wavecontrol    EQU    30 ; B
  48. n_glissfunk    EQU    31 ; B
  49. n_sampleoffset    EQU    32 ; B
  50. n_pattpos    EQU    33 ; B
  51. n_loopcount    EQU    34 ; B
  52. n_funkoffset    EQU    35 ; B
  53. n_wavestart    EQU    36 ; L
  54. n_reallength    EQU    40 ; W
  55.  
  56. mt_init    LEA    mt_data,A0
  57.     MOVE.L    A0,mt_SongDataPtr
  58.     MOVE.L    A0,A1
  59.     LEA    952(A1),A1
  60.     MOVEQ    #127,D0
  61.     MOVEQ    #0,D1
  62. mtloop    MOVE.L    D1,D2
  63.     SUBQ.W    #1,D0
  64. mtloop2    MOVE.B    (A1)+,D1
  65.     CMP.B    D2,D1
  66.     BGT.S    mtloop
  67.     DBRA    D0,mtloop2
  68.     ADDQ.B    #1,D2
  69.             
  70.     LEA    mt_SampleStarts(PC),A1
  71.     ASL.L    #8,D2
  72.     ASL.L    #2,D2
  73.     ADD.L    #1084,D2
  74.     ADD.L    A0,D2
  75.     MOVE.L    D2,A2
  76.     MOVEQ    #30,D0
  77. mtloop3    CLR.L    (A2)
  78.     MOVE.L    A2,(A1)+
  79.     MOVEQ    #0,D1
  80.     MOVE.W    42(A0),D1
  81.     ASL.L    #1,D1
  82.     ADD.L    D1,A2
  83.     ADD.L    #30,A0
  84.     DBRA    D0,mtloop3
  85.  
  86.     andi.b    #$fd,$bfe001
  87.     OR.B    #init_filter,$BFE001
  88.     MOVE.B    #6,mt_speed
  89.     CLR.B    mt_counter
  90.     CLR.B    mt_SongPos
  91.     CLR.W    mt_PatternPos
  92. mt_end    CLR.W    $DFF0A8
  93.     CLR.W    $DFF0B8
  94.     CLR.W    $DFF0C8
  95.     CLR.W    $DFF0D8
  96.     MOVE.W    #$F,$DFF096
  97.     RTS
  98.  
  99. mt_music
  100.     MOVEM.L    D0-D4/A0-A6,-(SP)
  101.     ADDQ.B    #1,mt_counter
  102.     MOVE.B    mt_counter(PC),D0
  103.     CMP.B    mt_speed(PC),D0
  104.     BLO.S    mt_NoNewNote
  105.     CLR.B    mt_counter
  106.     TST.B    mt_PattDelTime2
  107.     BEQ.S    mt_GetNewNote
  108.     BSR.S    mt_NoNewAllChannels
  109.     BRA    mt_dskip
  110.  
  111. mt_NoNewNote
  112.     BSR.S    mt_NoNewAllChannels
  113.     BRA    mt_NoNewPosYet
  114.  
  115. mt_NoNewAllChannels
  116.     LEA    $DFF0A0,A5
  117.     LEA    mt_chan1temp(PC),A6
  118.     BSR    mt_CheckEfx
  119.     LEA    $DFF0B0,A5
  120.     LEA    mt_chan2temp(PC),A6
  121.     BSR    mt_CheckEfx
  122.     LEA    $DFF0C0,A5
  123.     LEA    mt_chan3temp(PC),A6
  124.     BSR    mt_CheckEfx
  125.     LEA    $DFF0D0,A5
  126.     LEA    mt_chan4temp(PC),A6
  127.     BRA    mt_CheckEfx
  128.  
  129. mt_GetNewNote
  130.     MOVE.L    mt_SongDataPtr(PC),A0
  131.     LEA    12(A0),A3
  132.     LEA    952(A0),A2    ;pattpo
  133.     LEA    1084(A0),A0    ;patterndata
  134.     MOVEQ    #0,D0
  135.     MOVEQ    #0,D1
  136.     MOVE.B    mt_SongPos(PC),D0
  137.     MOVE.B    (A2,D0.W),D1
  138.     ASL.L    #8,D1
  139.     ASL.L    #2,D1
  140.     ADD.W    mt_PatternPos(PC),D1
  141.     CLR.W    mt_DMACONtemp
  142.  
  143.     LEA    $DFF0A0,A5
  144.     LEA    mt_chan1temp(PC),A6
  145.     BSR.S    mt_PlayVoice
  146.     LEA    $DFF0B0,A5
  147.     LEA    mt_chan2temp(PC),A6
  148.     BSR.S    mt_PlayVoice
  149.     LEA    $DFF0C0,A5
  150.     LEA    mt_chan3temp(PC),A6
  151.     BSR.S    mt_PlayVoice
  152.     LEA    $DFF0D0,A5
  153.     LEA    mt_chan4temp(PC),A6
  154.     BSR.S    mt_PlayVoice
  155.     BRA    mt_SetDMA
  156.  
  157. mt_PlayVoice
  158.     TST.L    (A6)
  159.     BNE.S    mt_plvskip
  160.     BSR    mt_PerNop
  161. mt_plvskip
  162.     MOVE.L    (A0,D1.L),(A6)
  163.     ADDQ.L    #4,D1
  164.     MOVEQ    #0,D2
  165.     MOVE.B    n_cmd(A6),D2
  166.     AND.B    #$F0,D2
  167.     LSR.B    #4,D2
  168.     MOVE.B    (A6),D0
  169.     AND.B    #$F0,D0
  170.     OR.B    D0,D2
  171.     TST.B    D2
  172.     BEQ    mt_SetRegs
  173.     MOVEQ    #0,D3
  174.     LEA    mt_SampleStarts(PC),A1
  175.     MOVE    D2,D4
  176.     SUBQ.L    #1,D2
  177.     ASL.L    #2,D2
  178.     MULU    #30,D4
  179.     MOVE.L    (A1,D2.L),n_start(A6)
  180.     MOVE.W    (A3,D4.L),n_length(A6)
  181.     MOVE.W    (A3,D4.L),n_reallength(A6)
  182.     MOVE.B    2(A3,D4.L),n_finetune(A6)
  183.     MOVE.B    3(A3,D4.L),n_volume(A6)
  184.     MOVE.W    4(A3,D4.L),D3 ; Get repeat
  185.     TST.W    D3
  186.     BEQ.S    mt_NoLoop
  187.     MOVE.L    n_start(A6),D2    ; Get start
  188.     ASL.W    #1,D3
  189.     ADD.L    D3,D2        ; Add repeat
  190.     MOVE.L    D2,n_loopstart(A6)
  191.     MOVE.L    D2,n_wavestart(A6)
  192.     MOVE.W    4(A3,D4.L),D0    ; Get repeat
  193.     ADD.W    6(A3,D4.L),D0    ; Add replen
  194.     MOVE.W    D0,n_length(A6)
  195.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  196.     MOVEQ    #0,D0
  197.     MOVE.B    n_volume(A6),D0
  198.     bsr set_volume
  199.     BRA.S    mt_SetRegs
  200.  
  201. mt_NoLoop
  202.     MOVE.L    n_start(A6),D2
  203.     ADD.L    D3,D2
  204.     MOVE.L    D2,n_loopstart(A6)
  205.     MOVE.L    D2,n_wavestart(A6)
  206.     MOVE.W    6(A3,D4.L),n_replen(A6)    ; Save replen
  207.     MOVEQ    #0,D0
  208.     MOVE.B    n_volume(A6),D0
  209.     bsr set_volume
  210. mt_SetRegs
  211.     MOVE.W    (A6),D0
  212.     AND.W    #$0FFF,D0
  213.     BEQ    mt_CheckMoreEfx    ; If no note
  214.     MOVE.W    2(A6),D0
  215.     AND.W    #$0FF0,D0
  216.     CMP.W    #$0E50,D0
  217.     BEQ.S    mt_DoSetFineTune
  218.     MOVE.B    2(A6),D0
  219.     AND.B    #$0F,D0
  220.     CMP.B    #3,D0    ; TonePortamento
  221.     BEQ.S    mt_ChkTonePorta
  222.     CMP.B    #5,D0
  223.     BEQ.S    mt_ChkTonePorta
  224.     CMP.B    #9,D0    ; Sample Offset
  225.     BNE.S    mt_SetPeriod
  226.     BSR    mt_CheckMoreEfx
  227.     BRA.S    mt_SetPeriod
  228.  
  229. mt_DoSetFineTune
  230.     BSR    mt_SetFineTune
  231.     BRA.S    mt_SetPeriod
  232.  
  233. mt_ChkTonePorta
  234.     BSR    mt_SetTonePorta
  235.     BRA    mt_CheckMoreEfx
  236.  
  237. mt_SetPeriod
  238.     MOVEM.L    D0-D1/A0-A1,-(SP)
  239.     MOVE.W    (A6),D1
  240.     AND.W    #$0FFF,D1
  241.     LEA    mt_PeriodTable(PC),A1
  242.     MOVEQ    #0,D0
  243.     MOVEQ    #36,D7
  244. mt_ftuloop
  245.     CMP.W    (A1,D0.W),D1
  246.     BHS.S    mt_ftufound
  247.     ADDQ.L    #2,D0
  248.     DBRA    D7,mt_ftuloop
  249. mt_ftufound
  250.     MOVEQ    #0,D1
  251.     MOVE.B    n_finetune(A6),D1
  252.     MULU    #36*2,D1
  253.     ADD.L    D1,A1
  254.     MOVE.W    (A1,D0.W),n_period(A6)
  255.     MOVEM.L    (SP)+,D0-D1/A0-A1
  256.  
  257.     MOVE.W    2(A6),D0
  258.     AND.W    #$0FF0,D0
  259.     CMP.W    #$0ED0,D0 ; Notedelay
  260.     BEQ    mt_CheckMoreEfx
  261.  
  262.     MOVE.W    n_dmabit(A6),$DFF096
  263.     BTST    #2,n_wavecontrol(A6)
  264.     BNE.S    mt_vibnoc
  265.     CLR.B    n_vibratopos(A6)
  266. mt_vibnoc
  267.     BTST    #6,n_wavecontrol(A6)
  268.     BNE.S    mt_trenoc
  269.     CLR.B    n_tremolopos(A6)
  270. mt_trenoc
  271.     MOVE.L    n_start(A6),(A5)    ; Set start
  272.     MOVE.W    n_length(A6),4(A5)    ; Set length
  273.     MOVE.W    n_period(A6),D0
  274.     MOVE.W    D0,6(A5)        ; Set period
  275.     MOVE.W    n_dmabit(A6),D0
  276.     OR.W    D0,mt_DMACONtemp
  277.     BRA    mt_CheckMoreEfx
  278.  
  279. mt_SetDMA
  280.     MOVE.W    #300,D0
  281. mt_WaitDMA
  282.     DBRA    D0,mt_WaitDMA
  283.     MOVE.W    mt_DMACONtemp(PC),D0
  284.     OR.W    #$8000,D0
  285.     MOVE.W    D0,$DFF096
  286.     MOVE.W    #300,D0
  287. mt_WaitDMA2
  288.     DBRA    D0,mt_WaitDMA2
  289.  
  290.     LEA    $DFF000,A5
  291.     LEA    mt_chan4temp(PC),A6
  292.     MOVE.L    n_loopstart(A6),$D0(A5)
  293.     MOVE.W    n_replen(A6),$D4(A5)
  294.     LEA    mt_chan3temp(PC),A6
  295.     MOVE.L    n_loopstart(A6),$C0(A5)
  296.     MOVE.W    n_replen(A6),$C4(A5)
  297.     LEA    mt_chan2temp(PC),A6
  298.     MOVE.L    n_loopstart(A6),$B0(A5)
  299.     MOVE.W    n_replen(A6),$B4(A5)
  300.     LEA    mt_chan1temp(PC),A6
  301.     MOVE.L    n_loopstart(A6),$A0(A5)
  302.     MOVE.W    n_replen(A6),$A4(A5)
  303.  
  304. mt_dskip
  305.     ADD.W    #16,mt_PatternPos
  306.     MOVE.B    mt_PattDelTime,D0
  307.     BEQ.S    mt_dskc
  308.     MOVE.B    D0,mt_PattDelTime2
  309.     CLR.B    mt_PattDelTime
  310. mt_dskc    TST.B    mt_PattDelTime2
  311.     BEQ.S    mt_dska
  312.     SUBQ.B    #1,mt_PattDelTime2
  313.     BEQ.S    mt_dska
  314.     SUB.W    #16,mt_PatternPos
  315. mt_dska    TST.B    mt_PBreakFlag
  316.     BEQ.S    mt_nnpysk
  317.     SF    mt_PBreakFlag
  318.     MOVEQ    #0,D0
  319.     MOVE.B    mt_PBreakPos(PC),D0
  320.     CLR.B    mt_PBreakPos
  321.     LSL.W    #4,D0
  322.     MOVE.W    D0,mt_PatternPos
  323. mt_nnpysk
  324.     CMP.W    #1024,mt_PatternPos
  325.     BLO.S    mt_NoNewPosYet
  326. mt_NextPosition    
  327.     MOVEQ    #0,D0
  328.     MOVE.B    mt_PBreakPos(PC),D0
  329.     LSL.W    #4,D0
  330.     MOVE.W    D0,mt_PatternPos
  331.     CLR.B    mt_PBreakPos
  332.     CLR.B    mt_PosJumpFlag
  333.     ADDQ.B    #1,mt_SongPos
  334.     AND.B    #$7F,mt_SongPos
  335.     MOVE.B    mt_SongPos(PC),D1
  336.     MOVE.L    mt_SongDataPtr(PC),A0
  337.     CMP.B    950(A0),D1
  338.     BLO.S    mt_NoNewPosYet
  339.     CLR.B    mt_SongPos
  340. mt_NoNewPosYet    
  341.     TST.B    mt_PosJumpFlag
  342.     BNE.S    mt_NextPosition
  343.     MOVEM.L    (SP)+,D0-D4/A0-A6
  344.     RTS
  345.  
  346. mt_CheckEfx
  347.     BSR    mt_UpdateFunk
  348.     MOVE.W    n_cmd(A6),D0
  349.     AND.W    #$0FFF,D0
  350.     BEQ.S    mt_PerNop
  351.     MOVE.B    n_cmd(A6),D0
  352.     AND.B    #$0F,D0
  353.     BEQ.S    mt_Arpeggio
  354.     CMP.B    #1,D0
  355.     BEQ    mt_PortaUp
  356.     CMP.B    #2,D0
  357.     BEQ    mt_PortaDown
  358.     CMP.B    #3,D0
  359.     BEQ    mt_TonePortamento
  360.     CMP.B    #4,D0
  361.     BEQ    mt_Vibrato
  362.     CMP.B    #5,D0
  363.     BEQ    mt_TonePlusVolSlide
  364.     CMP.B    #6,D0
  365.     BEQ    mt_VibratoPlusVolSlide
  366.     CMP.B    #$E,D0
  367.     BEQ    mt_E_Commands
  368. SetBack    MOVE.W    n_period(A6),6(A5)
  369.     CMP.B    #7,D0
  370.     BEQ    mt_Tremolo
  371.     CMP.B    #$A,D0
  372.     BEQ    mt_VolumeSlide
  373. mt_Return2
  374.     RTS
  375.  
  376. mt_PerNop
  377.     MOVE.W    n_period(A6),6(A5)
  378.     RTS
  379.  
  380. mt_Arpeggio
  381.     MOVEQ    #0,D0
  382.     MOVE.B    mt_counter(PC),D0
  383.     DIVS    #3,D0
  384.     SWAP    D0
  385.     CMP.W    #0,D0
  386.     BEQ.S    mt_Arpeggio2
  387.     CMP.W    #2,D0
  388.     BEQ.S    mt_Arpeggio1
  389.     MOVEQ    #0,D0
  390.     MOVE.B    n_cmdlo(A6),D0
  391.     LSR.B    #4,D0
  392.     BRA.S    mt_Arpeggio3
  393.  
  394. mt_Arpeggio1
  395.     MOVEQ    #0,D0
  396.     MOVE.B    n_cmdlo(A6),D0
  397.     AND.B    #15,D0
  398.     BRA.S    mt_Arpeggio3
  399.  
  400. mt_Arpeggio2
  401.     MOVE.W    n_period(A6),D2
  402.     BRA.S    mt_Arpeggio4
  403.  
  404. mt_Arpeggio3
  405.     ASL.W    #1,D0
  406.     MOVEQ    #0,D1
  407.     MOVE.B    n_finetune(A6),D1
  408.     MULU    #36*2,D1
  409.     LEA    mt_PeriodTable(PC),A0
  410.     ADD.L    D1,A0
  411.     MOVEQ    #0,D1
  412.     MOVE.W    n_period(A6),D1
  413.     MOVEQ    #36,D7
  414. mt_arploop
  415.     MOVE.W    (A0,D0.W),D2
  416.     CMP.W    (A0),D1
  417.     BHS.S    mt_Arpeggio4
  418.     ADDQ.L    #2,A0
  419.     DBRA    D7,mt_arploop
  420.     RTS
  421.  
  422. mt_Arpeggio4
  423.     MOVE.W    D2,6(A5)
  424.     RTS
  425.  
  426. mt_FinePortaUp
  427.     TST.B    mt_counter
  428.     BNE.S    mt_Return2
  429.     MOVE.B    #$0F,mt_LowMask
  430. mt_PortaUp
  431.     MOVEQ    #0,D0
  432.     MOVE.B    n_cmdlo(A6),D0
  433.     AND.B    mt_LowMask(PC),D0
  434.     MOVE.B    #$FF,mt_LowMask
  435.     SUB.W    D0,n_period(A6)
  436.     MOVE.W    n_period(A6),D0
  437.     AND.W    #$0FFF,D0
  438.     CMP.W    #113,D0
  439.     BPL.S    mt_PortaUskip
  440.     AND.W    #$F000,n_period(A6)
  441.     OR.W    #113,n_period(A6)
  442. mt_PortaUskip
  443.     MOVE.W    n_period(A6),D0
  444.     AND.W    #$0FFF,D0
  445.     MOVE.W    D0,6(A5)
  446.     RTS    
  447.  
  448. mt_FinePortaDown
  449.     TST.B    mt_counter
  450.     BNE    mt_Return2
  451.     MOVE.B    #$0F,mt_LowMask
  452. mt_PortaDown
  453.     CLR.W    D0
  454.     MOVE.B    n_cmdlo(A6),D0
  455.     AND.B    mt_LowMask(PC),D0
  456.     MOVE.B    #$FF,mt_LowMask
  457.     ADD.W    D0,n_period(A6)
  458.     MOVE.W    n_period(A6),D0
  459.     AND.W    #$0FFF,D0
  460.     CMP.W    #856,D0
  461.     BMI.S    mt_PortaDskip
  462.     AND.W    #$F000,n_period(A6)
  463.     OR.W    #856,n_period(A6)
  464. mt_PortaDskip
  465.     MOVE.W    n_period(A6),D0
  466.     AND.W    #$0FFF,D0
  467.     MOVE.W    D0,6(A5)
  468.     RTS
  469.  
  470. mt_SetTonePorta
  471.     MOVE.L    A0,-(SP)
  472.     MOVE.W    (A6),D2
  473.     AND.W    #$0FFF,D2
  474.     MOVEQ    #0,D0
  475.     MOVE.B    n_finetune(A6),D0
  476.     MULU    #37*2,D0
  477.     LEA    mt_PeriodTable(PC),A0
  478.     ADD.L    D0,A0
  479.     MOVEQ    #0,D0
  480. mt_StpLoop
  481.     CMP.W    (A0,D0.W),D2
  482.     BHS.S    mt_StpFound
  483.     ADDQ.W    #2,D0
  484.     CMP.W    #37*2,D0
  485.     BLO.S    mt_StpLoop
  486.     MOVEQ    #35*2,D0
  487. mt_StpFound
  488.     MOVE.B    n_finetune(A6),D2
  489.     AND.B    #8,D2
  490.     BEQ.S    mt_StpGoss
  491.     TST.W    D0
  492.     BEQ.S    mt_StpGoss
  493.     SUBQ.W    #2,D0
  494. mt_StpGoss
  495.     MOVE.W    (A0,D0.W),D2
  496.     MOVE.L    (SP)+,A0
  497.     MOVE.W    D2,n_wantedperiod(A6)
  498.     MOVE.W    n_period(A6),D0
  499.     CLR.B    n_toneportdirec(A6)
  500.     CMP.W    D0,D2
  501.     BEQ.S    mt_ClearTonePorta
  502.     BGE    mt_Return2
  503.     MOVE.B    #1,n_toneportdirec(A6)
  504.     RTS
  505.  
  506. mt_ClearTonePorta
  507.     CLR.W    n_wantedperiod(A6)
  508.     RTS
  509.  
  510. mt_TonePortamento
  511.     MOVE.B    n_cmdlo(A6),D0
  512.     BEQ.S    mt_TonePortNoChange
  513.     MOVE.B    D0,n_toneportspeed(A6)
  514.     CLR.B    n_cmdlo(A6)
  515. mt_TonePortNoChange
  516.     TST.W    n_wantedperiod(A6)
  517.     BEQ    mt_Return2
  518.     MOVEQ    #0,D0
  519.     MOVE.B    n_toneportspeed(A6),D0
  520.     TST.B    n_toneportdirec(A6)
  521.     BNE.S    mt_TonePortaUp
  522. mt_TonePortaDown
  523.     ADD.W    D0,n_period(A6)
  524.     MOVE.W    n_wantedperiod(A6),D0
  525.     CMP.W    n_period(A6),D0
  526.     BGT.S    mt_TonePortaSetPer
  527.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  528.     CLR.W    n_wantedperiod(A6)
  529.     BRA.S    mt_TonePortaSetPer
  530.  
  531. mt_TonePortaUp
  532.     SUB.W    D0,n_period(A6)
  533.     MOVE.W    n_wantedperiod(A6),D0
  534.     CMP.W    n_period(A6),D0
  535.     BLT.S    mt_TonePortaSetPer
  536.     MOVE.W    n_wantedperiod(A6),n_period(A6)
  537.     CLR.W    n_wantedperiod(A6)
  538.  
  539. mt_TonePortaSetPer
  540.     MOVE.W    n_period(A6),D2
  541.     MOVE.B    n_glissfunk(A6),D0
  542.     AND.B    #$0F,D0
  543.     BEQ.S    mt_GlissSkip
  544.     MOVEQ    #0,D0
  545.     MOVE.B    n_finetune(A6),D0
  546.     MULU    #36*2,D0
  547.     LEA    mt_PeriodTable(PC),A0
  548.     ADD.L    D0,A0
  549.     MOVEQ    #0,D0
  550. mt_GlissLoop
  551.     CMP.W    (A0,D0.W),D2
  552.     BHS.S    mt_GlissFound
  553.     ADDQ.W    #2,D0
  554.     CMP.W    #36*2,D0
  555.     BLO.S    mt_GlissLoop
  556.     MOVEQ    #35*2,D0
  557. mt_GlissFound
  558.     MOVE.W    (A0,D0.W),D2
  559. mt_GlissSkip
  560.     MOVE.W    D2,6(A5) ; Set period
  561.     RTS
  562.  
  563. mt_Vibrato
  564.     MOVE.B    n_cmdlo(A6),D0
  565.     BEQ.S    mt_Vibrato2
  566.     MOVE.B    n_vibratocmd(A6),D2
  567.     AND.B    #$0F,D0
  568.     BEQ.S    mt_vibskip
  569.     AND.B    #$F0,D2
  570.     OR.B    D0,D2
  571. mt_vibskip
  572.     MOVE.B    n_cmdlo(A6),D0
  573.     AND.B    #$F0,D0
  574.     BEQ.S    mt_vibskip2
  575.     AND.B    #$0F,D2
  576.     OR.B    D0,D2
  577. mt_vibskip2
  578.     MOVE.B    D2,n_vibratocmd(A6)
  579. mt_Vibrato2
  580.     MOVE.B    n_vibratopos(A6),D0
  581.     LEA    mt_VibratoTable(PC),A4
  582.     LSR.W    #2,D0
  583.     AND.W    #$001F,D0
  584.     MOVEQ    #0,D2
  585.     MOVE.B    n_wavecontrol(A6),D2
  586.     AND.B    #$03,D2
  587.     BEQ.S    mt_vib_sine
  588.     LSL.B    #3,D0
  589.     CMP.B    #1,D2
  590.     BEQ.S    mt_vib_rampdown
  591.     MOVE.B    #255,D2
  592.     BRA.S    mt_vib_set
  593. mt_vib_rampdown
  594.     TST.B    n_vibratopos(A6)
  595.     BPL.S    mt_vib_rampdown2
  596.     MOVE.B    #255,D2
  597.     SUB.B    D0,D2
  598.     BRA.S    mt_vib_set
  599. mt_vib_rampdown2
  600.     MOVE.B    D0,D2
  601.     BRA.S    mt_vib_set
  602. mt_vib_sine
  603.     MOVE.B    0(A4,D0.W),D2
  604. mt_vib_set
  605.     MOVE.B    n_vibratocmd(A6),D0
  606.     AND.W    #15,D0
  607.     MULU    D0,D2
  608.     LSR.W    #7,D2
  609.     MOVE.W    n_period(A6),D0
  610.     TST.B    n_vibratopos(A6)
  611.     BMI.S    mt_VibratoNeg
  612.     ADD.W    D2,D0
  613.     BRA.S    mt_Vibrato3
  614. mt_VibratoNeg
  615.     SUB.W    D2,D0
  616. mt_Vibrato3
  617.     MOVE.W    D0,6(A5)
  618.     MOVE.B    n_vibratocmd(A6),D0
  619.     LSR.W    #2,D0
  620.     AND.W    #$003C,D0
  621.     ADD.B    D0,n_vibratopos(A6)
  622.     RTS
  623.  
  624. mt_TonePlusVolSlide
  625.     BSR    mt_TonePortNoChange
  626.     BRA    mt_VolumeSlide
  627.  
  628. mt_VibratoPlusVolSlide
  629.     BSR.S    mt_Vibrato2
  630.     BRA    mt_VolumeSlide
  631.  
  632. mt_Tremolo
  633.     MOVE.B    n_cmdlo(A6),D0
  634.     BEQ.S    mt_Tremolo2
  635.     MOVE.B    n_tremolocmd(A6),D2
  636.     AND.B    #$0F,D0
  637.     BEQ.S    mt_treskip
  638.     AND.B    #$F0,D2
  639.     OR.B    D0,D2
  640. mt_treskip
  641.     MOVE.B    n_cmdlo(A6),D0
  642.     AND.B    #$F0,D0
  643.     BEQ.S    mt_treskip2
  644.     AND.B    #$0F,D2
  645.     OR.B    D0,D2
  646. mt_treskip2
  647.     MOVE.B    D2,n_tremolocmd(A6)
  648. mt_Tremolo2
  649.     MOVE.B    n_tremolopos(A6),D0
  650.     LEA    mt_VibratoTable(PC),A4
  651.     LSR.W    #2,D0
  652.     AND.W    #$001F,D0
  653.     MOVEQ    #0,D2
  654.     MOVE.B    n_wavecontrol(A6),D2
  655.     LSR.B    #4,D2
  656.     AND.B    #$03,D2
  657.     BEQ.S    mt_tre_sine
  658.     LSL.B    #3,D0
  659.     CMP.B    #1,D2
  660.     BEQ.S    mt_tre_rampdown
  661.     MOVE.B    #255,D2
  662.     BRA.S    mt_tre_set
  663. mt_tre_rampdown
  664.     TST.B    n_vibratopos(A6)
  665.     BPL.S    mt_tre_rampdown2
  666.     MOVE.B    #255,D2
  667.     SUB.B    D0,D2
  668.     BRA.S    mt_tre_set
  669. mt_tre_rampdown2
  670.     MOVE.B    D0,D2
  671.     BRA.S    mt_tre_set
  672. mt_tre_sine
  673.     MOVE.B    0(A4,D0.W),D2
  674. mt_tre_set
  675.     MOVE.B    n_tremolocmd(A6),D0
  676.     AND.W    #15,D0
  677.     MULU    D0,D2
  678.     LSR.W    #6,D2
  679.     MOVEQ    #0,D0
  680.     MOVE.B    n_volume(A6),D0
  681.     TST.B    n_tremolopos(A6)
  682.     BMI.S    mt_TremoloNeg
  683.     ADD.W    D2,D0
  684.     BRA.S    mt_Tremolo3
  685. mt_TremoloNeg
  686.     SUB.W    D2,D0
  687. mt_Tremolo3
  688.     BPL.S    mt_TremoloSkip
  689.     CLR.W    D0
  690. mt_TremoloSkip
  691.     CMP.W    #$40,D0
  692.     BLS.S    mt_TremoloOk
  693.     MOVE.W    #$40,D0
  694. mt_TremoloOk
  695.     bsr set_volume
  696.     MOVE.B    n_tremolocmd(A6),D0
  697.     LSR.W    #2,D0
  698.     AND.W    #$003C,D0
  699.     ADD.B    D0,n_tremolopos(A6)
  700.     RTS
  701.  
  702. mt_SampleOffset
  703.     MOVEQ    #0,D0
  704.     MOVE.B    n_cmdlo(A6),D0
  705.     BEQ.S    mt_sononew
  706.     MOVE.B    D0,n_sampleoffset(A6)
  707. mt_sononew
  708.     MOVE.B    n_sampleoffset(A6),D0
  709.     LSL.W    #7,D0
  710.     CMP.W    n_length(A6),D0
  711.     BGE.S    mt_sofskip
  712.     SUB.W    D0,n_length(A6)
  713.     LSL.W    #1,D0
  714.     ADD.L    D0,n_start(A6)
  715.     RTS
  716. mt_sofskip
  717.     MOVE.W    #$0001,n_length(A6)
  718.     RTS
  719.  
  720. mt_VolumeSlide
  721.     MOVEQ    #0,D0
  722.     MOVE.B    n_cmdlo(A6),D0
  723.     LSR.B    #4,D0
  724.     TST.B    D0
  725.     BEQ.S    mt_VolSlideDown
  726. mt_VolSlideUp
  727.     ADD.B    D0,n_volume(A6)
  728.     CMP.B    #$40,n_volume(A6)
  729.     BMI.S    mt_vsuskip
  730.     MOVE.B    #$40,n_volume(A6)
  731. mt_vsuskip
  732.     MOVE.B    n_volume(A6),D0
  733.     bsr set_volume
  734.     RTS
  735.  
  736. mt_VolSlideDown
  737.     MOVEQ    #0,D0
  738.     MOVE.B    n_cmdlo(A6),D0
  739.     AND.B    #$0F,D0
  740. mt_VolSlideDown2
  741.     SUB.B    D0,n_volume(A6)
  742.     BPL.S    mt_vsdskip
  743.     CLR.B    n_volume(A6)
  744. mt_vsdskip
  745.     MOVE.B    n_volume(A6),D0
  746.     bsr set_volume
  747.     RTS
  748.  
  749. mt_PositionJump
  750.     MOVE.B    n_cmdlo(A6),D0
  751.     SUBQ.B    #1,D0
  752.     MOVE.B    D0,mt_SongPos
  753. mt_pj2    CLR.B    mt_PBreakPos
  754.     ST     mt_PosJumpFlag
  755.     RTS
  756.  
  757. mt_VolumeChange
  758.     MOVEQ    #0,D0
  759.     MOVE.B    n_cmdlo(A6),D0
  760.     CMP.B    #$40,D0
  761.     BLS.S    mt_VolumeOk
  762.     MOVEQ    #$40,D0
  763. mt_VolumeOk
  764.     MOVE.B    D0,n_volume(A6)
  765.     bsr set_volume
  766.     RTS
  767.  
  768. mt_PatternBreak
  769.     MOVEQ    #0,D0
  770.     MOVE.B    n_cmdlo(A6),D0
  771.     MOVE.L    D0,D2
  772.     LSR.B    #4,D0
  773.     MULU    #10,D0
  774.     AND.B    #$0F,D2
  775.     ADD.B    D2,D0
  776.     CMP.B    #63,D0
  777.     BHI.S    mt_pj2
  778.     MOVE.B    D0,mt_PBreakPos
  779.     ST    mt_PosJumpFlag
  780.     RTS
  781.  
  782. mt_SetSpeed
  783.     MOVE.B    3(A6),D0
  784.     BEQ    mt_Return2
  785.     CLR.B    mt_counter
  786.     MOVE.B    D0,mt_speed
  787.     RTS
  788.  
  789. mt_CheckMoreEfx
  790.     BSR    mt_UpdateFunk
  791.     MOVE.B    2(A6),D0
  792.     AND.B    #$0F,D0
  793.     CMP.B    #$9,D0
  794.     BEQ    mt_SampleOffset
  795.     CMP.B    #$B,D0
  796.     BEQ    mt_PositionJump
  797.     CMP.B    #$D,D0
  798.     BEQ.S    mt_PatternBreak
  799.     CMP.B    #$E,D0
  800.     BEQ.S    mt_E_Commands
  801.     CMP.B    #$F,D0
  802.     BEQ.S    mt_SetSpeed
  803.     CMP.B    #$C,D0
  804.     BEQ    mt_VolumeChange
  805.     BRA    mt_PerNop
  806.  
  807. mt_E_Commands
  808.     MOVE.B    n_cmdlo(A6),D0
  809.     AND.B    #$F0,D0
  810.     LSR.B    #4,D0
  811.     BEQ.S    mt_FilterOnOff
  812.     CMP.B    #1,D0
  813.     BEQ    mt_FinePortaUp
  814.     CMP.B    #2,D0
  815.     BEQ    mt_FinePortaDown
  816.     CMP.B    #3,D0
  817.     BEQ.S    mt_SetGlissControl
  818.     CMP.B    #4,D0
  819.     BEQ    mt_SetVibratoControl
  820.     CMP.B    #5,D0
  821.     BEQ    mt_SetFineTune
  822.     CMP.B    #6,D0
  823.     BEQ    mt_JumpLoop
  824.     CMP.B    #7,D0
  825.     BEQ    mt_SetTremoloControl
  826.     CMP.B    #9,D0
  827.     BEQ    mt_RetrigNote
  828.     CMP.B    #$A,D0
  829.     BEQ    mt_VolumeFineUp
  830.     CMP.B    #$B,D0
  831.     BEQ    mt_VolumeFineDown
  832.     CMP.B    #$C,D0
  833.     BEQ    mt_NoteCut
  834.     CMP.B    #$D,D0
  835.     BEQ    mt_NoteDelay
  836.     CMP.B    #$E,D0
  837.     BEQ    mt_PatternDelay
  838.     CMP.B    #$F,D0
  839.     BEQ    mt_FunkIt
  840.     RTS
  841.  
  842. mt_FilterOnOff
  843.     MOVE.B    n_cmdlo(A6),D0
  844.     AND.B    #1,D0
  845.     ASL.B    #1,D0
  846.     AND.B    #$FD,$BFE001
  847.     OR.B    D0,$BFE001
  848.     RTS    
  849.  
  850. mt_SetGlissControl
  851.     MOVE.B    n_cmdlo(A6),D0
  852.     AND.B    #$0F,D0
  853.     AND.B    #$F0,n_glissfunk(A6)
  854.     OR.B    D0,n_glissfunk(A6)
  855.     RTS
  856.  
  857. mt_SetVibratoControl
  858.     MOVE.B    n_cmdlo(A6),D0
  859.     AND.B    #$0F,D0
  860.     AND.B    #$F0,n_wavecontrol(A6)
  861.     OR.B    D0,n_wavecontrol(A6)
  862.     RTS
  863.  
  864. mt_SetFineTune
  865.     MOVE.B    n_cmdlo(A6),D0
  866.     AND.B    #$0F,D0
  867.     MOVE.B    D0,n_finetune(A6)
  868.     RTS
  869.  
  870. mt_JumpLoop
  871.     TST.B    mt_counter
  872.     BNE    mt_Return2
  873.     MOVE.B    n_cmdlo(A6),D0
  874.     AND.B    #$0F,D0
  875.     BEQ.S    mt_SetLoop
  876.     TST.B    n_loopcount(A6)
  877.     BEQ.S    mt_jumpcnt
  878.     SUBQ.B    #1,n_loopcount(A6)
  879.     BEQ    mt_Return2
  880. mt_jmploop    MOVE.B    n_pattpos(A6),mt_PBreakPos
  881.     ST    mt_PBreakFlag
  882.     RTS
  883.  
  884. mt_jumpcnt
  885.     MOVE.B    D0,n_loopcount(A6)
  886.     BRA.S    mt_jmploop
  887.  
  888. mt_SetLoop
  889.     MOVE.W    mt_PatternPos(PC),D0
  890.     LSR.W    #4,D0
  891.     MOVE.B    D0,n_pattpos(A6)
  892.     RTS
  893.  
  894. mt_SetTremoloControl
  895.     MOVE.B    n_cmdlo(A6),D0
  896.     AND.B    #$0F,D0
  897.     LSL.B    #4,D0
  898.     AND.B    #$0F,n_wavecontrol(A6)
  899.     OR.B    D0,n_wavecontrol(A6)
  900.     RTS
  901.  
  902. mt_RetrigNote
  903.     MOVE.L    D1,-(SP)
  904.     MOVEQ    #0,D0
  905.     MOVE.B    n_cmdlo(A6),D0
  906.     AND.B    #$0F,D0
  907.     BEQ.S    mt_rtnend
  908.     MOVEQ    #0,D1
  909.     MOVE.B    mt_counter(PC),D1
  910.     BNE.S    mt_rtnskp
  911.     MOVE.W    (A6),D1
  912.     AND.W    #$0FFF,D1
  913.     BNE.S    mt_rtnend
  914.     MOVEQ    #0,D1
  915.     MOVE.B    mt_counter(PC),D1
  916. mt_rtnskp
  917.     DIVU    D0,D1
  918.     SWAP    D1
  919.     TST.W    D1
  920.     BNE.S    mt_rtnend
  921. mt_DoRetrig
  922.     MOVE.W    n_dmabit(A6),$DFF096    ; Channel DMA off
  923.     MOVE.L    n_start(A6),(A5)    ; Set sampledata pointer
  924.     MOVE.W    n_length(A6),4(A5)    ; Set length
  925.     MOVE.W    #300,D0
  926. mt_rtnloop1
  927.     DBRA    D0,mt_rtnloop1
  928.     MOVE.W    n_dmabit(A6),D0
  929.     BSET    #15,D0
  930.     MOVE.W    D0,$DFF096
  931.     MOVE.W    #300,D0
  932. mt_rtnloop2
  933.     DBRA    D0,mt_rtnloop2
  934.     MOVE.L    n_loopstart(A6),(A5)
  935.     MOVE.L    n_replen(A6),4(A5)
  936. mt_rtnend
  937.     MOVE.L    (SP)+,D1
  938.     RTS
  939.  
  940. mt_VolumeFineUp
  941.     TST.B    mt_counter
  942.     BNE    mt_Return2
  943.     MOVEQ    #0,D0
  944.     MOVE.B    n_cmdlo(A6),D0
  945.     AND.B    #$F,D0
  946.     BRA    mt_VolSlideUp
  947.  
  948. mt_VolumeFineDown
  949.     TST.B    mt_counter
  950.     BNE    mt_Return2
  951.     MOVEQ    #0,D0
  952.     MOVE.B    n_cmdlo(A6),D0
  953.     AND.B    #$0F,D0
  954.     BRA    mt_VolSlideDown2
  955.  
  956. mt_NoteCut
  957.     MOVEQ    #0,D0
  958.     MOVE.B    n_cmdlo(A6),D0
  959.     AND.B    #$0F,D0
  960.     CMP.B    mt_counter(PC),D0
  961.     BNE    mt_Return2
  962.     CLR.B    n_volume(A6)
  963.     MOVE.W    #0,8(A5)
  964.     RTS
  965.  
  966. mt_NoteDelay
  967.     MOVEQ    #0,D0
  968.     MOVE.B    n_cmdlo(A6),D0
  969.     AND.B    #$0F,D0
  970.     CMP.B    mt_counter,D0
  971.     BNE    mt_Return2
  972.     MOVE.W    (A6),D0
  973.     BEQ    mt_Return2
  974.     MOVE.L    D1,-(SP)
  975.     BRA    mt_DoRetrig
  976.  
  977. mt_PatternDelay
  978.     TST.B    mt_counter
  979.     BNE    mt_Return2
  980.     MOVEQ    #0,D0
  981.     MOVE.B    n_cmdlo(A6),D0
  982.     AND.B    #$0F,D0
  983.     TST.B    mt_PattDelTime2
  984.     BNE    mt_Return2
  985.     ADDQ.B    #1,D0
  986.     MOVE.B    D0,mt_PattDelTime
  987.     RTS
  988.  
  989. mt_FunkIt
  990.     TST.B    mt_counter
  991.     BNE    mt_Return2
  992.     MOVE.B    n_cmdlo(A6),D0
  993.     AND.B    #$0F,D0
  994.     LSL.B    #4,D0
  995.     AND.B    #$0F,n_glissfunk(A6)
  996.     OR.B    D0,n_glissfunk(A6)
  997.     TST.B    D0
  998.     BEQ    mt_Return2
  999. mt_UpdateFunk
  1000.     MOVEM.L    A0/D1,-(SP)
  1001.     MOVEQ    #0,D0
  1002.     MOVE.B    n_glissfunk(A6),D0
  1003.     LSR.B    #4,D0
  1004.     BEQ.S    mt_funkend
  1005.     LEA    mt_FunkTable(PC),A0
  1006.     MOVE.B    (A0,D0.W),D0
  1007.     ADD.B    D0,n_funkoffset(A6)
  1008.     BTST    #7,n_funkoffset(A6)
  1009.     BEQ.S    mt_funkend
  1010.     CLR.B    n_funkoffset(A6)
  1011.  
  1012.     MOVE.L    n_loopstart(A6),D0
  1013.     MOVEQ    #0,D1
  1014.     MOVE.W    n_replen(A6),D1
  1015.     ADD.L    D1,D0
  1016.     ADD.L    D1,D0
  1017.     MOVE.L    n_wavestart(A6),A0
  1018.     ADDQ.L    #1,A0
  1019.     CMP.L    D0,A0
  1020.     BLO.S    mt_funkok
  1021.     MOVE.L    n_loopstart(A6),A0
  1022. mt_funkok
  1023.     MOVE.L    A0,n_wavestart(A6)
  1024.     MOVEQ    #-1,D0
  1025.     SUB.B    (A0),D0
  1026.     MOVE.B    D0,(A0)
  1027. mt_funkend
  1028.     MOVEM.L    (SP)+,A0/D1
  1029.     RTS
  1030.  
  1031.  
  1032. SET_VOLUME
  1033.  
  1034.     mulu mt_volscale,d0
  1035.     lsl.l #2,d0
  1036.     swap d0
  1037.     move.w d0,8(a5)
  1038.     rts
  1039.     
  1040.  
  1041. mt_FunkTable dc.b 0,5,6,7,8,10,11,13,16,19,22,26,32,43,64,128
  1042.  
  1043. mt_VibratoTable    
  1044.     dc.b   0, 24, 49, 74, 97,120,141,161
  1045.     dc.b 180,197,212,224,235,244,250,253
  1046.     dc.b 255,253,250,244,235,224,212,197
  1047.     dc.b 180,161,141,120, 97, 74, 49, 24
  1048.  
  1049. mt_PeriodTable
  1050. ; Tuning 0, Normal
  1051.     dc.w    856,808,762,720,678,640,604,570,538,508,480,453
  1052.     dc.w    428,404,381,360,339,320,302,285,269,254,240,226
  1053.     dc.w    214,202,190,180,170,160,151,143,135,127,120,113
  1054. ; Tuning 1
  1055.     dc.w    850,802,757,715,674,637,601,567,535,505,477,450
  1056.     dc.w    425,401,379,357,337,318,300,284,268,253,239,225
  1057.     dc.w    213,201,189,179,169,159,150,142,134,126,119,113
  1058. ; Tuning 2
  1059.     dc.w    844,796,752,709,670,632,597,563,532,502,474,447
  1060.     dc.w    422,398,376,355,335,316,298,282,266,251,237,224
  1061.     dc.w    211,199,188,177,167,158,149,141,133,125,118,112
  1062. ; Tuning 3
  1063.     dc.w    838,791,746,704,665,628,592,559,528,498,470,444
  1064.     dc.w    419,395,373,352,332,314,296,280,264,249,235,222
  1065.     dc.w    209,198,187,176,166,157,148,140,132,125,118,111
  1066. ; Tuning 4
  1067.     dc.w    832,785,741,699,660,623,588,555,524,495,467,441
  1068.     dc.w    416,392,370,350,330,312,294,278,262,247,233,220
  1069.     dc.w    208,196,185,175,165,156,147,139,131,124,117,110
  1070. ; Tuning 5
  1071.     dc.w    826,779,736,694,655,619,584,551,520,491,463,437
  1072.     dc.w    413,390,368,347,328,309,292,276,260,245,232,219
  1073.     dc.w    206,195,184,174,164,155,146,138,130,123,116,109
  1074. ; Tuning 6
  1075.     dc.w    820,774,730,689,651,614,580,547,516,487,460,434
  1076.     dc.w    410,387,365,345,325,307,290,274,258,244,230,217
  1077.     dc.w    205,193,183,172,163,154,145,137,129,122,115,109
  1078. ; Tuning 7
  1079.     dc.w    814,768,725,684,646,610,575,543,513,484,457,431
  1080.     dc.w    407,384,363,342,323,305,288,272,256,242,228,216
  1081.     dc.w    204,192,181,171,161,152,144,136,128,121,114,108
  1082. ; Tuning -8
  1083.     dc.w    907,856,808,762,720,678,640,604,570,538,508,480
  1084.     dc.w    453,428,404,381,360,339,320,302,285,269,254,240
  1085.     dc.w    226,214,202,190,180,170,160,151,143,135,127,120
  1086. ; Tuning -7
  1087.     dc.w    900,850,802,757,715,675,636,601,567,535,505,477
  1088.     dc.w    450,425,401,379,357,337,318,300,284,268,253,238
  1089.     dc.w    225,212,200,189,179,169,159,150,142,134,126,119
  1090. ; Tuning -6
  1091.     dc.w    894,844,796,752,709,670,632,597,563,532,502,474
  1092.     dc.w    447,422,398,376,355,335,316,298,282,266,251,237
  1093.     dc.w    223,211,199,188,177,167,158,149,141,133,125,118
  1094. ; Tuning -5
  1095.     dc.w    887,838,791,746,704,665,628,592,559,528,498,470
  1096.     dc.w    444,419,395,373,352,332,314,296,280,264,249,235
  1097.     dc.w    222,209,198,187,176,166,157,148,140,132,125,118
  1098. ; Tuning -4
  1099.     dc.w    881,832,785,741,699,660,623,588,555,524,494,467
  1100.     dc.w    441,416,392,370,350,330,312,294,278,262,247,233
  1101.     dc.w    220,208,196,185,175,165,156,147,139,131,123,117
  1102. ; Tuning -3
  1103.     dc.w    875,826,779,736,694,655,619,584,551,520,491,463
  1104.     dc.w    437,413,390,368,347,328,309,292,276,260,245,232
  1105.     dc.w    219,206,195,184,174,164,155,146,138,130,123,116
  1106. ; Tuning -2
  1107.     dc.w    868,820,774,730,689,651,614,580,547,516,487,460
  1108.     dc.w    434,410,387,365,345,325,307,290,274,258,244,230
  1109.     dc.w    217,205,193,183,172,163,154,145,137,129,122,115
  1110. ; Tuning -1
  1111.     dc.w    862,814,768,725,684,646,610,575,543,513,484,457
  1112.     dc.w    431,407,384,363,342,323,305,288,272,256,242,228
  1113.     dc.w    216,203,192,181,171,161,152,144,136,128,121,114
  1114.  
  1115. mt_chan1temp    dc.l    0,0,0,0,0,$00010000,0,  0,0,0,0
  1116. mt_chan2temp    dc.l    0,0,0,0,0,$00020000,0,  0,0,0,0
  1117. mt_chan3temp    dc.l    0,0,0,0,0,$00040000,0,  0,0,0,0
  1118. mt_chan4temp    dc.l    0,0,0,0,0,$00080000,0,  0,0,0,0
  1119.  
  1120. mt_SampleStarts    dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1121.         dc.l    0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  1122.  
  1123. mt_SongDataPtr    dc.l 0
  1124.  
  1125. mt_speed    dc.b 6
  1126. mt_counter    dc.b 0
  1127. mt_SongPos    dc.b 0
  1128. mt_PBreakPos    dc.b 0
  1129. mt_PosJumpFlag    dc.b 0
  1130. mt_PBreakFlag    dc.b 0
  1131. mt_LowMask    dc.b 0
  1132. mt_PattDelTime    dc.b 0
  1133. mt_PattDelTime2    dc.b 0,0
  1134.  
  1135. mt_PatternPos    dc.w 0
  1136. mt_DMACONtemp    dc.w 0
  1137.  
  1138. MT_VOLSCALE    dc.w $4000    ;$4000 = max volume, 0 = off
  1139.  
  1140. ;/* End of File */
  1141.